侧边栏切换

win下VSCode with SDL2配置LVGL模拟器开发环境

最后编辑于: 2023-06-19 11:18  |  分类: PC软件开发  |  标签: LVGL VSCode   |  浏览数: 1549  |  评论数: 0


0. 序言

上篇文章基于MSYS2的MINGW64 GCC和CMake在Win下VSCode里搭建SDL2开发环境 中, 我们在VSCode里搭建好了SDL2的开发环境, 以此为基础, 本文我们要搭建起LVGL模拟器的开发环境, 达到我们的最终目的.

本文也有个所谓的参考文章https://my.oschina.net/u/5732601/blog/5518641.

它和上篇文章中的参考文章是同一个作者的系列文章.

如果说上一篇的参考文章只是有些不详细不严谨和一些小坑的话, 那这篇参考文章就是巨坑!!

我一开始自然是参考它的方法操作, 可是编译始终是一堆错误, 怎么都编译不过. 我被它坑惨了, 掉在坑里, 想了各种方法, 各种尝试, 浪费了多少脑细胞, 浪费了大半天的时间, 还是爬不出来.

最终幡然醒悟, 抛弃它, 按照自己的理解, 摸索出自己的方法, 轻松搞定! 唉…

接下来本文就描述一下我摸索出的方法.

1. 基于LVGL最新版源码 的模拟器

1.1 下载代码

我在网上看到很多搭建LVGL模拟器的文章, 都是基于github上lvgl/lv_port_pc_eclipse这个代码仓库来做的.

我们也选择它, 虽然它是For eclipse的, 其实只是目录下多了些eclipse相关的工程文件, 我们不用不理这些文件便是.

它也是用CMake编译的, 所以其实只要把这个仓库代码clone下来, 稍稍修改一下根目录下的CMakeList.txt文件即可顺利编译成功.

我摸索出的方法就是如此, 一点也不复杂麻烦, 改动的也很少.

下图是当前(@20230330)lvgl/lv_port_pc_eclipse这个仓库的一个截图:

可看到, 其下只有一个文件夹lvgl, 是个外链仓库, 就是LVGL本体的源码, 不过它不是LVGL源码的master分支(master分支目前是稳定版V8.3), 而是正在开发中V9.0的最新版分支(73b4460)代码, 仓库地址: https://github.com/lvgl/lvgl/tree/73b446015a06055e984cc26e5cba744096409895

下图是此仓库的当前截图.

BTW: 跑题一下, 在上图里, .gitignor这一行, 可发现 最新版的LVGL已经支持中文的拼音输入了, nice.

最正确的下载代码的方法, 应该是用下面命令就可以把所有代码都clone下来了.

git clone --recursive https://github.com/lvgl/lv_port_pc_eclipse.git

但是, 以往的经验, 众所周知的原因, 我们直接从github clone代码是很艰难的, 特别是这种带外链仓库的情况就更恼火.

所以, 我用的是下载zip的方式, 分别把2个仓库下载好, 然后再组装在一起.

不管用什么方法, 代码准备好就OK.

1.2 修改CMakeList.txt

打开代码根目录下的CMakeList.txt文件, 内容如下:

cmake_minimum_required(VERSION 3.10)
project(lvgl)
set(CMAKE_C_STANDARD 11)#C11
set(CMAKE_CXX_STANDARD 17)#C17
set(CMAKE_CXX_STANDARD_REQUIRED ON)

INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR})

file(GLOB_RECURSE INCLUDES "./*.h" )

add_subdirectory(lvgl)

SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) 
SET(CMAKE_CXX_FLAGS "-O3")

find_package(SDL2 REQUIRED SDL2)
include_directories(${SDL2_INCLUDE_DIRS})
add_executable(main main.c mouse_cursor_icon.c ${SOURCES} ${INCLUDES})
add_compile_definitions(LV_CONF_INCLUDE_SIMPLE)
target_link_libraries(main PRIVATE lvgl lvgl::examples lvgl::demos ${SDL2_LIBRARIES})
add_custom_target (run COMMAND ${EXECUTABLE_OUTPUT_PATH}/main)

我修改后如下:

cmake_minimum_required(VERSION 3.10)
project(lvgl)
set(CMAKE_C_STANDARD 11)#C11
set(CMAKE_CXX_STANDARD 17)#C17
set(CMAKE_CXX_STANDARD_REQUIRED ON)

INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR})

file(GLOB_RECURSE INCLUDES "./*.h" )

add_subdirectory(lvgl)

SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) 
SET(CMAKE_CXX_FLAGS "-O3")

# find_package(SDL2 REQUIRED SDL2)
# include_directories(${SDL2_INCLUDE_DIRS})
add_executable(aaa main.c mouse_cursor_icon.c ${SOURCES} ${INCLUDES})
add_compile_definitions(LV_CONF_INCLUDE_SIMPLE)
target_link_libraries(aaa mingw32)  # new add
target_link_libraries(aaa lvgl lvgl::examples lvgl::demos ${SDL2_LIBRARIES})
target_link_libraries(aaa SDL2main)  # new add
target_link_libraries(aaa SDL2)  # new add
add_custom_target (run COMMAND ${EXECUTABLE_OUTPUT_PATH}/aaa)

仅修改了5行:

另外, 我还编译目标--可执行文件名 改成了aaa, 这一点可以不用改

1.3 编译运行

OK, 都改好了, VSCode打开此代码目录就可以直接F7编译了.

不过这里有个需注意点, "编译目标--可执行文件名" 要和 代码根目录名 一致, 否则也会编译出错.

编译成功后, 会在根目录的bin目录下 生成exe文件, 运行效果如下:

2. 基于LVGL V7版 的模拟器

由于我的嵌入式设备上跑的是LVGL V7.11版本, 而且LVGL V8相对于V7变动不小, 很多API函数都变了.

所以我的模拟器的版本最好还是要用V7的, 唉, 还要继续搞.

不过搞定了一次, 套路都是一样的.

2.1 下载V7版代码

还是先下载代码, 还是在lvgl/lv_port_pc_eclipse这个仓库页面,

可看到这里有11个分支, 点进去

再点这里, 就可打开V7.0分支的代码仓库

这个代码仓库的情况如下图:

有3个子目录, 且都是外链仓库

还是用和前面一样的方法, 不管使用git clone --recursive命令, 还是下载zip组装, 把代码准备好就行.

2.2 修改CMakeList.txt

CMakeList.txt的修改套路还是一样, 我就直接放出我修改后的内容了

cmake_minimum_required(VERSION 3.10)
project(lvgl)
set(CMAKE_C_STANDARD 11)#C11
set(CMAKE_CXX_STANDARD 17)#C17
set(CMAKE_CXX_STANDARD_REQUIRED ON)

INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR})

file(GLOB_RECURSE INCLUDES "lv_drivers/*.h" "lv_examples/*.h"  "lvgl/*.h"  "./*.h" )
file(GLOB_RECURSE SOURCES  "lv_drivers/*.c" "lv_examples/*.c"  "lvgl/*.c" )

SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) 

# find_package(SDL2 REQUIRED SDL2)    注释掉
# include_directories(${SDL2_INCLUDE_DIRS})     注释掉  
add_executable(aaa main.c mouse_cursor_icon.c ui_power.c ${SOURCES} ${INCLUDES})
target_link_libraries(aaa mingw32)   # new add
target_link_libraries(aaa SDL2main)   # new add
# target_link_libraries(main PRIVATE SDL2 )     注释掉
target_link_libraries(aaa SDL2)   # new add
add_custom_target (run COMMAND ${EXECUTABLE_OUTPUT_PATH}/aaa)

同样的方法, 注释掉它原文关于SDL2的行, 把我的3行target_link_libraries(...)加进去, 就改好了!

2.3 编译运行

还是要注意 编译目标--可执行文件名代码根目录名 的一致.

编译运行, 效果如下

OK, 全部搞定!


上一篇: 基于msys2的mingw64 gcc和cmake在win下vscode里搭建sdl2开发环境

下一篇: ioremap源码跟踪